package spring.factoryBean;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;

/**
 * FactoryBean 测试：FieldRetrievingFactoryBean 声明 枚举类
 *
 * @author ME
 * @date 2020/1/14
 */
public enum ColorEnum {

    /**红色*/
    RED,
    /**黑色*/
    BLANK,
    /**黄色*/
    YELLOW;

    /**
     * TODO 枚举类依赖注入：枚举对象无法直接使用依赖注入，需要通过 @PostConstruct 设置 Spring Bean。<p>
     *  或者说，由于在 JVM中 枚举一定是单例的，在 Spring 生命周期中 任意时刻都可以使用 setter 人肉注入 Bean
     */
    // @Autowired
    private ApplicationContext context;

    @Component
    public static class ApplicationContextInjector {
        @Autowired
        private ApplicationContext context;

        @PostConstruct
        private void postConstruct() {
            // Arrays.stream(ColorEnum.values()).forEach(colorEnum -> {
            //     colorEnum.setContext(context);
            // });
            BLANK.setContext(context);
        }
    }

    public ApplicationContext getContext() {
        return context;
    }

    public void setContext(ApplicationContext context) {
        this.context = context;
    }

}
